<?php
/**
 * Клас маппинг поисковых индексов
 *
 */
class SearchIndexes
{
	/**
	 * Список индексов
	 *
	 * @var array
	 */
	private $_indexes;
	/**
	 * Маппинг индекс => модель
	 *
	 * @var array
	 */
	private $_models;
	/**
	 * Маппинг id моделей для построения поискового запроса
	 *
	 * @var unknown_type
	 */
	private $_model_ids;
	/**
	 * Маппинг поисковых типов индекс => тип
	 *
	 * @var array
	 */
	private $_stypes;
	/**
	 * Инстанс класса
	 *
	 * @var SearchIndexes
	 */
	private static $_instance = null;
	/**
	 * Конструктор
	 *
	 */
	private function __construct()
	{
		$this->_indexes = array(
				 	 	 'singer',       		//0
						 'music',       		//1
						 'content_music_album', //2
						 'clip',				//3
						 'lyrics',				//4
						 'film',				//5
						 'video',				//6
						 'realvideo',			//7
						 'cvideo',				//8
						 'cvideo_album',		//9
						 'mobile_games',		//10
						 'download_games',		//11
						'online_games',
						 'profile',				//12
						 'blogs',				//13
 						 'community',			//14
						 'photo',				//15
						 'photo_album'			//16
       				);

        $this->_models = array(
      				//	'blogs'			=>	'Model_Post',
      					'music'			=>	'ContentMusicRow',
      				//	'clip'			=>	'Model_ContentMusic',
      				//	'singer'		=>	'Model_Singer',
      				//	'content_music_album'	=>	'Model_ContentMusicAlbum',
      					'lyrics'		=>	'Model_ContentMusic',
      				//	'video'			=> 	'Model_Video',
      					'film'			=> 	'Model_Films',
      				//	'cvideo'		=>	'Model_ContentVideo',
      					'realvideo'		=>	'Model_RealVideo',
      				//	'cvideo_album'	=>	'Model_VideoAlbum',
      				//	'mobile_games'  =>	'Model_ContentJava',
      				//	'download_games'=>	'Model_Game',
      				//	'photo'			=>	'Model_Photo',
      				//	'community'		=>	'Model_Community',
      				//	'photo_album'	=>	'Model_Album',
      				//	'profile'		=>	'Model_Profile',
      				);

      $this->_model_ids = array(
      					'blogs'			=>	'post.id',
      					'music'			=>	'content_music.id',
      					'clip'			=>	'content_music.id',
      					'lyrics'		=>	'content_music.id',
      					'singer'		=>	'singer.id',
      					'content_music_album'	=>	'content_music_album.id',
      					'video'			=>	'document.id',
      					'film'			=>	'content_film.id',
      					'cvideo'		=>	'content_videojava.id',
      					'realvideo'		=>	'content_realvideo.id',
      					'cvideo_album'	=>	'document.id',
      					'mobile_games'	=>	'content_videojava.id',
      					'download_games'=>	'games.id',
      					'photo'			=>	'photo.id',
      					'community'		=>	'community.id',
      					'photo_album'	=>	'document.id',
      					'profile'		=>	'profile.id',
      				);

      $this->_stypes = array(
      					"cvideo" => array("typename"=>"cvideo","title"=>"Видео"),
      					"film" => array("typename"=>"film","title"=>"Фильм"),
      					"realvideo" => array("typename"=>"cvideo","title"=>"Телепередачи"),
      					"video" => array("typename"=>"cvideo","title"=>"Видео"),
      					"singer" => array("typename"=>"singer","title"=>"Исполнители"),
						"mobile_games" => array("typename"=>"mobile_games","title"=>"Мобильные игры"),
						"download_games" => array("typename"=>"download_games","title"=>"Игры для компьютера"),
						"music" => array("typename"=>"music","title"=>"Музыка"),
						"lyrics" => array("typename"=>"lyrics","title"=>"Тексты песен"),
						"music" => array("typename"=>"clip","title"=>"Клип"),
						"blogs" => array("typename"=>"blogs","title"=>"Блоги"),
						"photo" => array("typename"=>"photo","title"=>"Фото"),
						"profile" => array("typename"=>"profile","title"=>"Люди"),
						"community" => array("typename"=>"community","title"=>"Сообщества"),
						"photo_album" => array("typename"=>"photo_album","title"=>"Фото альбомы"),
      					"cvideo_album" => array("typename"=>"cvideo_album","title"=>"Видео альбомы"),
      					'content_music_album' => array('typename'=>'content_music_album', 'title'=>'Альбомы'),
      				);
	}
	/**
	 * Создаем инстанс
	 *
	 * @return SearchIndexes
	 */
	public static function getInstance()
	{
		if (is_null(self::$_instance)) {
			self::$_instance = new self();
		}

		return self::$_instance;
	}
	/**
	 * Метод получения поисковых индексов
	 *
	 * @return array
	 */
	public function getIndexes()
	{
		return $this->_indexes;
	}
	/**
	 * Получение индекса по номеру
	 *
	 * @param int $indexNumber
	 * @return string
	 */
	public function getIndex($indexNumber)
	{
		return $this->_indexes[$indexNumber];
	}
	/**
	 * Получение модели по индексу
	 *
	 * @param string $index_name
	 * @return string
	 */
	public function getIndexModel($index_name)
	{
		return $this->_models[$index_name];
	}
	/**
	 * Получени ID модели для построения поискового запроса.
	 *
	 * @param string $index_name
	 * @return string
	 */
	public function getModelId($index_name)
	{
		return $this->_model_ids[$index_name];
	}
	/**
	 * Получение поисковых типов по которым есть результаты
	 *
	 * @param array $indexes
	 * @return array
	 */
	public function getStypes($indexes)
	{
		$tmp_array = array_diff_key($this->_stypes, $indexes);
		return array_diff_key($this->_stypes, $tmp_array);
	}
	/**
	 * Получение типа по имени индекса
	 *
	 * @param string $indexName
	 * @return array
	 */
	public function getStype($indexName)
	{
		return $this->_stypes[$indexName];
	}
	/**
	 * Получение номера индекса по имени
	 *
	 * @param string $indexName
	 * @return int
	 */
	public function getIndexNumber($indexName)
	{
		$temp_array = array_flip($this->_indexes);
		return $temp_array[$indexName];
	}

	public function checkIndexName($name)
	{
		return in_array($name, $this->_indexes);
	}
}